package com.shujia.day02;

import java.util.Scanner;

public class Demo09ControlChoice {
    public static void main(String[] args) {
        /*
            TODO 控制语句 - 选择结构

            TODO if语句:
                对应有三种格式：
                if(判断语句) {
                    判断条件为true的执行语句
                }
                if(判断语句) {
                    判断条件为true的执行语句
                }else{
                    判断条件为false的执行语句
                }
                if(判断语句1) {
                    判断条件1为true的执行语句
                }else if(判断语句2){
                    判断条件2为true的执行语句
                }else{
                     判断条件为false的执行语句
                }
             注意：
                1.if语句中可以使用方法体外的变量进行赋值等操作
                2.当{}中有且仅有一行代码时，可以省略{}

         */

        int a = 3;
        int b = 4;

        if (a++ > 3 | b-- <= 4) {
            System.out.println("判断条件执行结果为true");
        } else {
            System.out.println("判断条件执行结果为false");
        }
        // 上述结果：判断条件执行结果为true
        // TODO 对上述if语句进行优化
        /*
            将经常容易为true的判断子条件放在 || 左边
         */
        if (b-- <= 4 || a++ > 3) {
            System.out.println("判断条件执行结果为true");
        } else {
            System.out.println("判断条件执行结果为false");
        }

//        Scanner scanner = new Scanner(System.in);
//        System.out.println("请输入年龄：");
//        int age = scanner.nextInt();
        /*
            TODO 编程思想，防御型编程 => 在编写代码过程中，
                    要求能对代码运行场景中的特殊情况进行考虑 提高代码的普适性和健壮性

            年龄范围要求在  1~150 大于该范围的认为数据有误
         */
//        if (age > 18){
//            System.out.println("成年");
//        }else{
//            System.out.println("未成年..");
//        }

//        if (age < 1 || age > 150) {
//            System.out.println("数据存在异常...");
//        } else if (age > 18) {
//            System.out.println("成年");
//        } else {
//            System.out.println("未成年..");
//        }
        // TODO 对于上述的判断 如何进行优化  实际场景下 成年数据比未成年数据要高很多  自行思考


        /*
            TODO
                switch语句  选择判断语句
                switch(表达式) {
                      case 值1：
                        语句体1;
                        break;
                        case 值2：
                        语句体2;
                        break;
                        …
                        default：
                        语句体n+1;
                        break;
                }
                运行逻辑：在执行时，通过表达式得到对应的值 再进入{}方法体
                    通过case语句进行匹配，如果case的值和 表达式得到对应的值 相同 那么就执行对应的 语句体
                    当遇到有 break; 那么就退出
                    如果case语句没有匹配到值，那么会执行 default语句中的语句体
               注意：
                    case后面只能是常量，不能是变量，而且，多个case后面的值不能出现相同的
                    default可以省略吗?
                            可以省略。一般不建议。除非判断的值是固定的。(单选题)
                    break可以省略吗?
                            可以省略，一般不建议。否则结果可能不是你想要的
                    default的位置一定要在最后吗?
                            可以出现在switch语句任意位置。
                    switch语句的结束条件
                    遇到break
                    执行到程序的末尾

         */

        Scanner nextScanner = new Scanner(System.in);
//        int a1 =1;
        System.out.println("欢迎来到数加按摩馆请选择您喜欢的技师编号 1,8...:");
        // 如果获取到的数据是一个int类型
        if (nextScanner.hasNextInt()) {
            int getVar = nextScanner.nextInt();
            switch (getVar) {
                case 1:
                    System.out.println("您选择的是1号技师");
                        /*
                        break;
                        当break语句没有时，程序不会结束 继续往下执行，并且不会进行case语句的判断直接执行其中的
                            代码体中的内容
                        判断之后，一定不能忘了 break;
                        */
                case 8:
                    System.out.println("您选择的是8号技师");
                    break;
                default:
                    System.out.println("很遗憾，丽丽嫁人了");
                    break;
            }
        } else {
            System.out.println("请规范输入一个整型编号数据");
        }


        /*
            TODO 三目运算符和if语句的比较
                三目运算符会将计算的结果作为返回值返回出去
         */
        int intVar = true ? 1 : 2;
        // Python 和 Scala语言中的if判断可以返回数据 但是Java不行
//        int intVar2 = if (true) {
//            1
//        }

        // 定义该变量时没有进行初始化
        int intVar2;
        if (true)
            intVar2 = 1;
         else {
            intVar2 = 2;
        }
        System.out.println(intVar2); // 1


        // TODO if语句嵌套
        int ageJudge = 18; // 年龄
        int high = 150; // 身高
        if (ageJudge > 18){
            if (high < 100){
                System.out.println("判断为侏儒证");
            } else if (high <160) {
                System.out.println("缺少生长激素");
            }else {
                System.out.println("正常");
            }
        }else {
            if (high < 80){
                System.out.println("判断为侏儒证");
            } else {
                System.out.println("正常");
            }
        }


        // 拓展
        // 从控制台获取一个字符串
        String next = nextScanner.next();
    }
}
